<?php


/**
 * 基础信息类接口
 * @package  htdocs
 * @subpackage  module/base
 */
interface baseInterface {

    /**
     * 查询会员等级信息
     * @param int|null $rankID 等级ID，默认为空
     * @return mixed
     */
    public function searchRank( $rankID = null );

    /**
     * 标签组查询
     * @param array $arg_array 查询参数数组
     * $arg_array = array (
     *   'tagGroupID' => int 标签组ID
     *   'tagGroupName' => int 标签组名称
     *   'useFlg' => int 使用标志
     *   'sortname' => string 排序字段
     *   'sortorder' => string 排序方式
     *   'page' => int 分页页码
     *   'rp' => int 分页页数
     * )
     * @return mixed
     */
    public function searchTagGroup( &$arg_array );

    /**
     * 标签查询
     * @param array $arg_array 查询参数数组
     * $arg_array = array (
     *   'tagID' => int 标签ID
     *   'tagName' => int 标签名称
     *   'threshold' => double 标签阀值
     *   'useFlg' => double 使用标志
     *   'tagGroupID' => int 标签组ID
     *   'sortname' => string 排序字段
     *   'sortorder' => string 排序方式
     *   'page' => int 分页页码
     *   'rp' => int 分页页数
     * )
     * @return mixed
     */
    public function searchTag( &$arg_array );

}

/**
 * 基础信息类
 * @package  htdocs
 * @subpackage  module/base
 */
class baseHandler implements baseInterface {

    //数据库实例
    public $dbca;

    function __construct(  &$dbca ) {
        $this->dbca = $dbca;
    }

    /**
     * 查询会员等级信息
     * @param int|null $rankID 等级ID，默认为空
     * @return array|mixed|null
     */
    public function searchRank( $rankID = null ) {

        //sql字符串
        $sql = '';

        //参数类型字符串
        $params_type = '';

        //参数值数组
        $params_array = array();

        //等级ID
        if (!is_null($rankID) && is_numeric($rankID)) {
            $sql .= ' AND rankID = ?';
            $params_type .= 'i';
            $params_array[] = $rankID;
        }


        if ($sql) {
            $sql = 'WHERE ' . substr($sql, 4);
        }

        try {

            //查询分类信息
            $search_sql = 'SELECT * FROM cust_rank ' . $sql;;
            $temp_item_array = &$this->dbca->stmt_query($search_sql, $params_type, $params_array);
            if (!$temp_item_array)
                return null;

            foreach($temp_item_array as &$item) {
                $item_array[] = array(
                    'rankID' => $item->rankID,
                    'rankName' => $item->rankName,
                    'needAmt' => $item->needAmt,
                    'rate' => $item->rate,
                    'pointsRate' => $item->pointsRate,
                    'freight' => $item->freight,
                    'useFlg' => $item->useFlg,
                    'discount' => $item->discount
                );
            }

            return $item_array;

        } catch (Exception $e) {

            error_log($e->getMessage());
            return null;

        }

    }

    /**
     * 标签组查询
     * @param array $arg_array 查询参数数组
     * $arg_array = array (
     *   'tagGroupID' => int 标签组ID
     *   'tagGroupName' => int 标签组名称
     *   'useFlg' => int 使用标志
     *   'sortname' => string 排序字段
     *   'sortorder' => string 排序方式
     *   'page' => int 分页页码
     *   'rp' => int 分页页数
     * )
     * @return array|mixed|null
     */
    public function searchTagGroup( &$arg_array ) {

        //sql字符串
        $sql = '';

        //参数类型字符串
        $params_type = '';

        //参数值数组
        $params_array = array();

        //标签组ID
        if (isset($arg_array['tagGroupID']) && is_numeric($arg_array['tagGroupID'])) {
            $sql .= ' AND tagGroupID = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['tagGroupID'];
        }

        //标签组名称
        if (isset($arg_array['tagGroupName']) && !empty($arg_array['tagGroupName'])) {
            $sql .= ' AND tagGroupName = ?';
            $params_type .= 's';
            $params_array[] = $arg_array['tagGroupName'];
        }

        //使用标志
        if (isset($arg_array['useFlg']) && in_array($arg_array['useFlg'], array(0, 1))) {
            $sql .= ' AND useFlg = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['useFlg'];
        }

        if ($sql) {
            $sql = 'WHERE ' . substr($sql, 4);
        }

        try {

            if (isset($arg_array['rp']) && $arg_array['rp'] > 1) {

                //统计数量
                $search_sql = 'SELECT COUNT(*) AS item_count FROM cust_tag_group ' . $sql;
                $count_array = &$this->dbca->stmt_query($search_sql, $params_type, $params_array);
                $item_count = $count_array[0]->item_count;
                if ($item_count == 0) {
                    $arg_array['count'] = 0;
                    return null;
                }

                $arg_array['count'] = $item_count;

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

                //分页
                if (!isset($arg_array['page']) || !is_numeric($arg_array['page']) || $arg_array['page'] <= 0)
                    $arg_array['page'] = 1;

                $sql .= sprintf(' LIMIT %d, %d', ($arg_array['page'] - 1) * $arg_array['rp'], $arg_array['rp']);

            } else {

                $arg_array['count'] = 0;

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

            }

            //查询信息
            $search_sql = 'SELECT * FROM cust_tag_group ' . $sql;;
            $temp_item_array = &$this->dbca->stmt_query($search_sql, $params_type, $params_array);
            if (!$temp_item_array)
                return null;

            foreach($temp_item_array as &$item) {
                $item_array[] = array(
                    'tagGroupID' => $item->tagGroupID,
                    'tagGroupName'=>$item->tagGroupName,
                    'useFlg' => $item->useFlg
                );
            }

            return $item_array;

        } catch (Exception $e) {

            error_log($e->getMessage());
            return null;

        }

    }

    /**
     * 标签查询
     * @param array $arg_array 查询参数数组
     * $arg_array = array (
     *   'tagID' => int 标签ID
     *   'tagName' => int 标签名称
     *   'threshold' => double 标签阀值
     *   'useFlg' => double 使用标志
     *   'tagGroupID' => int 标签组ID
     *   'sortname' => string 排序字段
     *   'sortorder' => string 排序方式
     *   'page' => int 分页页码
     *   'rp' => int 分页页数
     * )
     * @return mixed
     */
    public function searchTag( &$arg_array ) {

        //sql字符串
        $sql = '';

        //参数类型字符串
        $params_type = '';

        //参数值数组
        $params_array = array();

        //标签ID
        if (isset($arg_array['tagID']) && is_numeric($arg_array['tagID'])) {
            $sql .= ' AND tagID = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['tagID'];
        }

        //标签组ID
        if (isset($arg_array['tagGroupID']) && is_numeric($arg_array['tagGroupID'])) {
            $sql .= ' AND tagGroupID = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['tagGroupID'];
        }

        //标签名称
        if (isset($arg_array['tagName']) && !empty($arg_array['tagName'])) {
            $sql .= ' AND tagName = ?';
            $params_type .= 's';
            $params_array[] = $arg_array['tagName'];
        }

        //标签阀值
        if (isset($arg_array['threshold']) && is_numeric($arg_array['threshold'])) {
            $sql .= ' AND threshold = ?';
            $params_type .= 'd';
            $params_array[] = $arg_array['threshold'];
        }

        //使用标志
        if (isset($arg_array['useFlg']) && in_array($arg_array['useFlg'], array(0, 1))) {
            $sql .= ' AND useFlg = ?';
            $params_type .= 'i';
            $params_array[] = $arg_array['useFlg'];
        }

        if ($sql) {
            $sql = 'WHERE ' . substr($sql, 4);
        }

        try {

            if (isset($arg_array['rp']) && $arg_array['rp'] > 1) {

                //统计数量
                $search_sql = 'SELECT COUNT(*) AS item_count FROM cust_tag ' . $sql;
                $count_array = &$this->dbca->stmt_query($search_sql, $params_type, $params_array);
                $item_count = $count_array[0]->item_count;
                if ($item_count == 0) {
                    $arg_array['count'] = 0;
                    return null;
                }

                $arg_array['count'] = $item_count;

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

                //分页
                if (!isset($arg_array['page']) || !is_numeric($arg_array['page']) || $arg_array['page'] <= 0)
                    $arg_array['page'] = 1;

                $sql .= sprintf(' LIMIT %d, %d', ($arg_array['page'] - 1) * $arg_array['rp'], $arg_array['rp']);

            } else {

                $arg_array['count'] = 0;

                //排序
                if (isset($arg_array['sortname']) && !empty($arg_array['sortname']))
                    $sql .= sprintf(' ORDER BY %s %s', $arg_array['sortname'], $arg_array['sortorder']);

            }

            //查询信息
            $search_sql = 'SELECT * FROM cust_tag ' . $sql;;
            $temp_item_array = &$this->dbca->stmt_query($search_sql, $params_type, $params_array);
            if (!$temp_item_array)
                return null;

            foreach($temp_item_array as &$item) {
                $item_array[] = array(
                    'tagID' => $item->tagID,
                    'tagName'=>$item->tagName,
                    'tagGroupID'=>$item->tagGroupID,
                    'threshold'=>$item->threshold,
                    'useFlg' => $item->useFlg
                );
            }

            return $item_array;

        } catch (Exception $e) {

            error_log($e->getMessage());
            return null;

        }

    }

}